home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload Trio 2 / Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO / dir37 / mxmnu241.zip / LOGIN.MNU < prev    next >
Text File  |  1993-01-26  |  23KB  |  953 lines

  1. Comment
  2. ========================================================
  3.  
  4. Copyright 1990-92 by Marc Perkel * All right reserved.
  5.  
  6. MarxMenu now allows you to login to a Novell network without using
  7. Novell's login program or messing with nasty login scripts. You can
  8. be in MarxMenu all the way in.
  9.  
  10. Before you start on this make sure you have read the Novell section of
  11. the MarxMenu manual. This menu is somewhat tricky and requires some
  12. study before you dive right in.
  13.  
  14. Logging into Novell is tricky. Especially if you are using boot roms
  15. on your network cards. Through much trial and error, I have found
  16. some solid tricks that make life easier.
  17.  
  18. You should have the following two BATCH files in your LOGIN
  19. directory as follows:
  20.  
  21. LOADNET.BAT  ;if used with BESTNET
  22. -----------
  23. @Echo Off
  24. %NET%
  25. %NETD%
  26. Set NET=
  27. Set NETD=
  28. Startup
  29.  
  30. LOADNET.BAT  ;if not used with BESTNET
  31. -----------
  32. @Echo Off
  33. NETX
  34. F:
  35. Startup
  36.  
  37. STARTUP.BAT
  38. -----------
  39. SET BOOTUP=LOGIN
  40. MarxMenu Login
  41. %BOOTUP%
  42.  
  43. Each workstation should have their own AUTOEXEC.BAT. The last line
  44. should be LOADNET. If you are running multiple versions of dos or a
  45. variety of computers you should run BESTNET as part of your bootup
  46. sequence.
  47.  
  48. Also, if you want automatic login you can add the following lines to you
  49. AUTOEXEC.BAT file:
  50.  
  51. SET USERNAME=MARC   Your Name Here
  52. SET PASSWORD=NERD   Your Password Here
  53.  
  54. You should also change the COMSPEC= to the network command.com BEFORE
  55. you run NETX. For some unknown reason, this solves a lot of problems.
  56.  
  57. Example:
  58.  
  59. IPX
  60. SET COMSPEC=O:COMMAMD.COM
  61. NETX
  62.  
  63. Another boot rom quirk is that you can't run any program off a boot
  64. rom that trashes upper memory. An example is running QEMM on a
  65. monochrome monitor.
  66.  
  67. By using this method the boot disk or boot rom hands control over in
  68. a clean way. LOADNET.BAT then branches to STARTUP.BAT for the rest
  69. of the login sequence.
  70.  
  71. For some strange reason which I can't explain, LOADNET and STARTUP
  72. have to be two separate batch files. I think it forces the transient
  73. part of COMMAND.COM to load into memory. Anyhow, don't combine these
  74. into one batch file
  75.  
  76. The first line of STARTUP.BAT is a message that tells this menu that
  77. the user is logging in for the first time. This menu creates a batch
  78. file and puts the name of it in the environment variable BOOTUP.
  79. STARTUP.BAT then executes this file.
  80.  
  81. This is the example for MY network. You'll have to modify it for
  82. yours. I'm doing a lot of tricky things in my login. Your login might
  83. not need to be as complex as mine.
  84.  
  85. One word of caution. After modifing this menu, always run MARXCOMP
  86. LOGIN to compile it. Otherwise, if you boot up into it you won't
  87. have enough access rights to recompile automatically. I do this by
  88. making a file called L.BAT.
  89.  
  90. ME LOGIN.MNU
  91. MARXCOMP LOGIN.MNU
  92.  
  93. ========================================================
  94. EndComment
  95.  
  96. var
  97.    UserName
  98.    OldPass
  99.    NewPass
  100.    Logged
  101.    Station
  102.    SmartDir
  103.    MyServer
  104.    OrigServer
  105.    HomeDir
  106.    DosDir
  107.    Shell
  108.    Vols
  109.    PasswordExpDays
  110.    SkipError
  111.    Servers
  112.    StatusWin
  113.    TsrLoaded
  114.    DrDos6
  115.    MyGroups
  116.  
  117. Comment
  118. ========================================================
  119.  
  120. If you are using 386 NetWare then make sure you copy the program
  121. SUBLOGIN.EXE to the LOGIN directory. This will allow you to do encrypted
  122. logins. Or you can run:
  123.  
  124. SET ALLOW UNENCRYPTED PASSWORDS = ON
  125.  
  126. ========================================================
  127. EndComment
  128.  
  129. Shell = CleanFileName(%COMSPEC%)
  130. MyServer = NovDefaultServer
  131. OrigServer = MyServer
  132. NovServers(Servers)
  133. Logged = %LOGGED% = 'TRUE'
  134.  
  135. SkipError = False
  136.  
  137. TryAutoLogin  ;login using environment variables
  138.  
  139. if not Logged then LoginFromScreen
  140.  
  141. NovSetPrimaryServer (MyServer)
  142. NovSetPreferredServer (MyServer)
  143.  
  144. NovReadGroups(UserName,MyGroups)    ;Read Groups user is in.
  145. SortArray(MyGroups)
  146.  
  147. UserName = NovLoginName
  148.  
  149. %LOGGED% = ''
  150. %USERNAME% = UserName
  151. %PASSWORD% = ''
  152.  
  153. ;----- Another Server Selected
  154.  
  155. if MyServer <> OrigServer
  156.    %BOOTUP% = 'STARTUP'
  157.    %LOGGED% = 'TRUE'
  158.    NovMapDrive('F',MyServer + '/SYS:LOGIN')
  159.    ChDir('F:\LOGIN')
  160.    ExitMenu
  161. endif
  162.  
  163. ;----- You can't assume that you have an F: drive unless you map it.
  164.  
  165. NovMapDrive ('F','SYS:LOGIN')
  166.  
  167. Comment
  168. ========================================================
  169.  
  170. If a TEMP environment variable is set, MarxMenu will use it for
  171. temporary batch files. This is compatible with DOS 5 and Windows
  172. conventions. The users should be given full access rights to this
  173. directory. I'm using \TMPFILES for my network.
  174.  
  175. ========================================================
  176. EndComment
  177.  
  178. if ExistDir('F:\TMPFILES') then %TEMP% = 'F:\TMPFILES'
  179.  
  180. ;----- Here we calculate a home directory for each user.
  181.  
  182. HomeDir = 'SYS:HOME\' + UserName
  183. if UserName = 'SUPERVISOR' then HomeDir = 'SYS:SYSTEM'
  184. if not ExistDir(HomeDir) then HomeDir = 'SYS:PUBLIC\UTIL'
  185.  
  186. Comment
  187. ========================================================
  188.  
  189. Here we calulate the the name of the dos directory that matches the
  190. version of dos we are running. The directory for DOS 5.0 would be
  191. SYS:PUBLIC\DOSV5.00
  192.  
  193. ========================================================
  194. EndComment
  195.  
  196. DosDir = 'SYS:PUBLIC\DOSV' + DosVersionString
  197.  
  198. ;----- DR DOS (NovOS)
  199.  
  200. if %OS% > ''
  201.    DosDir = 'SYS:PUBLIC\' + %OS% + %VER%
  202.    DrDos6 = Value(%VER%) >= 6
  203.    if DrDos6
  204.       Bat('SHARE.EXE')
  205.    endif
  206. endif
  207.  
  208. if not ExistDir(DosDir) then DosDir = ''
  209.  
  210. Comment
  211. ========================================================
  212.  
  213. Here's where we map our drives. This does not set the search path.
  214. You set that explicitly by writing to the PATH environment variable.
  215.  
  216. SYS:--+---PUBLIC---NSK
  217.       |     |
  218.       |     +------UTIL
  219.       |     |
  220.       |     +------DOSV5.00
  221.       |     |
  222.       |     +------DRDOS6.0
  223.       |
  224.       +---HOME-----MARC
  225.       |     |
  226.       |     +------VICKI
  227.       |
  228.       +---LOGIN
  229.  
  230. Drive map commands may contain server and volume referrences:
  231.  
  232. ========================================================
  233. EndComment
  234.  
  235. NovMapRoot ('H', HomeDir)            ;Home Directory
  236. NovMapRoot ('N','SYS:PUBLIC\NSK')    ;Network Survival Kit
  237. NovMapRoot ('O', DosDir)             ;Dos Directory
  238. NovMapRoot ('U','SYS:PUBLIC\UTIL')   ;Utilities Directory
  239. NovMapRoot ('P','SYS:PUBLIC')        ;Public Directory
  240. NovMapRoot ('L','SYS:LOGIN')         ;Login Directory
  241.  
  242. Comment
  243. ========================================================
  244.  
  245. Here we set a different directory for a program depending on if we
  246. have a color or monochrome monitor.
  247.  
  248. ========================================================
  249. EndComment
  250.  
  251. if VideoMode = Mono
  252.    SmartDir = 'SYS:PUBLIC\MSMART'
  253. else
  254.    SmartDir = 'SYS:PUBLIC\CSMART'
  255. endif
  256.  
  257. if ExistDir SmartDir
  258.    NovMapRoot ('S',SmartDir)
  259. endif
  260.  
  261. Comment
  262. ========================================================
  263.  
  264. W: is a work drive. When an application needs an extra search path, I
  265. move W: to that directory.
  266.  
  267.  OnKey 'L'
  268.    |NovMapRoot('W','\PUBLIC\LOTUS')
  269.    Lotus
  270.  
  271. ========================================================
  272. EndComment
  273.  
  274. NovMapRoot('W','H:')
  275.  
  276. if NovConsoleOperator
  277.    NovMapRoot ('V','F:\SYSTEM')     ;System Directory
  278. endif
  279.  
  280. if MyServer = 'TYME'
  281.  
  282.  
  283.    ;----- Here's where I log into a second server.
  284.  
  285.    if PosInList('SHOW',Servers) > 0
  286.       NovLogin('SHOW/' + UserName,OldPass)
  287.       NovMapDrive('K','SHOW/SYS:')
  288.    endif
  289.  
  290.    ;----- Here's where I log into a third server.
  291.  
  292.    if PosInList('TSS',Servers) > 0
  293.       NovLogin('TSS/' + UserName,OldPass)
  294.       NovMapDrive('J','TSS/SYS:')
  295.    endif
  296.  
  297.    ;----- Here's where I log into another server.
  298.  
  299.    if PosInList('MARX',Servers) > 0
  300.       NovLogin('MARX/' + UserName,OldPass)
  301.       NovMapDrive('G','MARX/SYS:')
  302.    endif
  303.  
  304. endif
  305.  
  306. NovVolumes(Vols)
  307.  
  308. if PosInList('VOL1',Vols) > 0 then NovMapDrive ('I','VOL1:')
  309.  
  310. ;----- Turbo Pascal 6
  311.  
  312. if ExistDir ('H:\BP7') then NovMapRoot ('T','H:\BP7\BIN')
  313.  
  314. ;----- If no drive C then use home directory
  315.  
  316. if Floppies < 3                     ;I'm using some 4 floppy machines
  317.    if not ExistDir ('C:\') then NovMapRoot('C','H:')
  318. endif
  319.  
  320. ;----- Here we define our search paths.
  321.  
  322. %PATH% = 'T:\;H:\;W:\;U:\;N:\;O:\;P:\;V:\;S:\;'
  323.  
  324. FixPath    ;Verifies all search paths exist
  325.  
  326. ChDir 'F:'
  327. ChDir (HomeDir)
  328.  
  329. ;----- Here's where we set master environment variable strings
  330.  
  331. %STATION% = Station
  332. if Left(Shell,2) <> 'C:' and ExistFile('O:\COMMAND.COM')
  333.    %COMSPEC% = 'O:\COMMAND.COM'
  334. endif
  335. %PROMPT% = '$e[1;33m$p: $e[0;32m'      ;ansi required
  336. %MXECHO% = 'OFF'
  337. %MV% = MyServer + '/SYS:'              ;MHS
  338.  
  339. ;----- Check for personal menu.
  340.  
  341. if ExistFile('H:\' + UserName + '.MNU')
  342.    %PMENU% = UserName + '.MNU'
  343. endif
  344.  
  345. ;----- Here's where I set up for Pick Directory
  346.  
  347. if UserName <> 'MARC'
  348.    SetEnv('PD.EXE=/$F:\HOME\PD.PIC')
  349. else
  350.    SetEnv('PD.EXE=/$H:\PD.PIC')
  351. endif
  352.  
  353. Comment
  354. ========================================================
  355.  
  356. Opens a semaphore that XMETER can read.
  357. To see how many users are users are on with XMETER type:
  358. XMETER LOGIN /U
  359.  
  360. =====================================}==================
  361. EndComment
  362.  
  363. NovOpenSemaphore ('XM-LOGIN',0)
  364.  
  365. ;----- Turn NumLock key on if in NumLock group.
  366.  
  367. if InGroup('NUMLOCK')
  368.    NumLock On
  369. else
  370.    NumLock Off
  371. endif
  372.  
  373. ;----- LOGIN is set to BOOTUP if logging in for the first time
  374.  
  375. if UpperCase(%BOOTUP%) <> 'LOGN' then ExitMenu
  376.  
  377. Comment
  378. ========================================================
  379.  
  380. In order to load TSRs, MarxMenu writes a temporary batch file and
  381. exits. The STARTUP.BAT file then jumps to this batch file.
  382.  
  383. ========================================================
  384. EndComment
  385.  
  386. ;----- Create temporary batch file for rest of login sequence
  387.  
  388. %BOOTUP% = BatFileName
  389.  
  390. ;----- To debug, set ECHO ON and add PAUSE commands
  391.  
  392. ;Bat ('ECHO ON')
  393.  
  394. Bat ('SET BOOTUP=')     ;clear BOOTUP environment variable
  395.  
  396. ;----- Set BREAK to ON if NovConsoleOperator
  397.  
  398. if NovConsoleOperator then Bat('BREAK ON')
  399.  
  400. Comment
  401. ========================================================
  402.  
  403. Here's where we load up all the TSRs the user is going to use. We set
  404. the environment variable TSR to Y to indicate that TSRs are loaded. This
  405. way if we log out and then back in we won't load them twice.
  406.  
  407. ========================================================
  408. EndComment
  409.  
  410. TsrLoaded = %TSR% = 'Y'
  411.  
  412. if not TsrLoaded
  413.  
  414.    %TSR% = 'Y'
  415.  
  416.    ;----- Load Task Switch Support
  417.  
  418.    if InGroup ('TASKMAX')
  419. ;      Bat (LoadHigh + 'TBMI2')
  420.    endif
  421.  
  422.    ;----- Load Mouse
  423.  
  424.    if InGroup ('MOUSE')
  425.       Bat (LoadHigh + 'P:\WINDOWS\MOUSE')
  426.    endif
  427.  
  428.    ;----- Load CastAway
  429.  
  430.    if InGroup ('CASTAWAY')
  431.       Bat ('P:\EXPR\CASTAWAY N /W=0 /I=0 /H')
  432.    endif
  433.  
  434.    ;----- Load BRequest
  435.  
  436.    if InGroup ('BREQ')
  437.       Bat (LoadHigh + 'BREQUEST')
  438.       Bat (LoadHigh + 'P:\SQL\NSREQ')
  439.    endif
  440.  
  441.    ;----- Load ExpressIT Mail System
  442.  
  443.    if InGroup ('EXPRESSIT')
  444.       Bat ('P:\EXPR\EXPRESSM F12')
  445.    endif
  446.  
  447.    ;----- Load Lan Assist
  448.  
  449.    if InGroup ('LANASSIST')
  450.       if InGroup ('LA-RES')
  451.          Bat (LoadHigh + 'P:LA\LA /L >NUL')
  452.       else
  453.          Bat (LoadHigh + 'P:LA\LA +N >NUL')
  454.       endif
  455.    endif
  456.  
  457.    ;----- Load SideKick if in Sidekick Group
  458.  
  459.    if InGroup('SIDEKICK')
  460.       Bat ('KBD CR')
  461.       Bat (LoadHigh + 'SWAPSK/N/G/DH:\ >NUL')
  462.       Bat ('SK')
  463.       Bat ('CLS')
  464.    endif
  465.  
  466.    ;----- Load SideKick 2 if in SK2 Group
  467.  
  468.    if (InGroup('SK2')) and not DrDos6
  469.       Bat (LoadHigh + 'P:\SK2\SK2')
  470.    endif
  471.  
  472.    ;----- Load MarxPop
  473.  
  474.    if InGroup('MARXPOP') and not DrDos6
  475.       Bat('MarxPop H:MarxPop.cfg')
  476.    endif
  477.  
  478. endif
  479.  
  480. Capture('LASER',2)
  481.  
  482. Comment
  483. ================================================================
  484.  
  485. This next section deals with running special programs bases on the
  486. physical station number rather than by user. This deals with special
  487. hardware that needs software drivers loaded.
  488.  
  489. ================================================================
  490. EndComment
  491.  
  492. ;----- CD ROM Machine
  493.  
  494. ;if NovStationAddress = '255:2'
  495. ;   Bat ('CD\PUBLIC\MA')
  496. ;   Bat ('MSCDEX.EXE /D:MSCD003 /M:12')
  497. ;   Bat ('MAR C:\ RW=/ /C')
  498. ;endif
  499.  
  500. if NovStationAddress = '254:93'
  501. ;   TextMode Mono
  502. endif
  503.  
  504. comment
  505. if NovStationAddress = '254:B8'
  506.    if (%REST% <> "ON") and (UserName <> "MARC")
  507.          clearscreen
  508.          writeln "Access Denied!  Try another workstation."
  509.          wait 60000
  510.    endif
  511. endif
  512. endcomment
  513.  
  514. ;----- Set Keyboard Speed Faster if 286 or greater.
  515.  
  516. if CPUClass > 1 then Bat('KBD 6')
  517.  
  518. Comment
  519. ================================================================
  520.  
  521. This next section deals with running special programs bases on the
  522. users preferrences.
  523.  
  524. ================================================================
  525. EndComment
  526.  
  527. if UserName = 'MARC'
  528.    Capture('DOT',1)
  529.    ChDir('BP7\MARX')
  530. endif
  531.  
  532. if UserName = 'VICKI'
  533. ;   if not TsrLoaded then Bat(LoadHigh + 'MOUSE')
  534.    Bat (LoadHigh + 'P:\SK2\SK2')
  535. endif
  536.  
  537. ;---- Map \home\phil\batch as drive 'Q' for user Phil
  538.  
  539. if UserName = 'PHIL'
  540.     NovMapRoot('Q','f:\home\phil\batch')
  541.     %PATH% = 'Q:\;T:\;H:\;W:\;U:\;N:\;O:\;P:\;V:\;S:\;'
  542.     FixPath    ;Verifies all search paths exist
  543. endif
  544.  
  545. if UserName = 'KEVIN'
  546.    Capture('DOT',2)
  547.    %PROMPT% = '($p)'
  548.    %PATH% = %PATH% + 'f:\home\kevin\brief'
  549.    ChDir('MARX')
  550. endif
  551.  
  552. if UserName = '386'
  553.    Capture('DOT',1)
  554. endif
  555.  
  556. if UserName = 'TSS'
  557.    NovMapDrive('G','F:')
  558.    %BOOTUP% = '\LOGIN\TSS.BAT'
  559.    exitmenu
  560. endif
  561.  
  562. if InGroup('BBS')
  563.    Capture('DOT',1)
  564.    NovMapRoot('W','F:\BBS\FAXPAK')
  565.    NovMapRoot('V','F:\BBS')
  566.    %FAXDIR% = 'C:\FAX'
  567.    SetEnv('D.EXE=/O/I')
  568.    Bat('CD FAX')
  569.    Bat('CASMGR CASMGR.CFG')
  570. ;   Bat('Ringboot /C1 /R4')
  571.    Bat('DROPTO S')
  572. endif
  573.  
  574. if UserName = 'WORK'
  575.    Capture('DOT',1)
  576. endif
  577.  
  578. if UserName = 'MHS'
  579.    Capture('DOT',1)
  580.    ChDir('F:\MHS\EXE')
  581.    NovMapDrive('H','F:')
  582.    Bat('MHSNOTFY')
  583.    Bat('MHSRESET')
  584.    Bat('DROPTO MHS')
  585. endif
  586.  
  587. Comment
  588. ================================================================
  589.  
  590. The batch file ends by jumping to personal menu, if there is one, or
  591. the default menu if there isn't. DROPTO.BAT is used to erase the
  592. temporary batch file that this menu creates.
  593.  
  594. TMAX.BAT
  595. --------
  596. taskmax /f
  597. marxmenu novmax
  598. dolist
  599.  
  600. ================================================================
  601. EndComment
  602.  
  603. if DrDos6 and InGroup('TASKMAX')
  604.    Bat ('DROPTO TMAX.BAT')
  605. endif
  606.  
  607. if ExistFile ('F:\HOME\' + UserName + '\' + UserName + '.MNU')
  608.    Bat ('DROPTO MARX ' + UserName)
  609. endif
  610.  
  611. Bat ('DROPTO MARX TYME')
  612.  
  613. ExitMenu
  614.  
  615. ;===============================================================
  616. ;===============================================================
  617.  
  618. ;----- Procedure Definitions
  619.  
  620. Procedure Capture (Queue, PrinterPort)
  621.    NovCaptureQueue(PrinterPort) = Queue
  622.    NovCaptureTimeOut(PrinterPort) = 5     ;5 second timeout
  623. EndProc
  624.  
  625.  
  626. Procedure LoadHigh
  627.    if %OS2% = 'Y'
  628.       Return 'LOADHIGH '
  629.    else
  630.       Return 'P:\QEMM\LOADHI.COM '
  631.    endif
  632. EndProc
  633.  
  634.  
  635. Comment
  636. ========================================================
  637.  
  638. If Environment variables USERNAME and PASSWORD are set, this menu
  639. will attempt to log into the network using these values. This allows
  640. for automatic login. You can also pass the parameters on the command
  641. line as follows.
  642.  
  643. MarxMenu Login <Name> <Password>
  644.  
  645. The name may contain a referrence to a server: Server/Name
  646.  
  647. ========================================================
  648. EndComment
  649.  
  650. ;----- Try Automatic Login using Environment Variables
  651.  
  652. Procedure TryAutoLogin
  653.    if Logged then Return
  654.    if CapsLock
  655.       CapsLock Off
  656.    else
  657.       UserName = ParamStr(2)
  658.       if UserName = '' then UserName = %USERNAME%
  659.       if UserName > ''
  660.          OldPass = ParamStr(3)
  661.          if OldPass = '' then OldPass = %PASSWORD%
  662.          SkipError = True
  663.          Login (UserName,OldPass)
  664.          SkipError = False
  665.          if PasswordNeedsChanged
  666.             Logged = False
  667.             Suggest 'C'
  668.          endif
  669.       endif
  670.    endif
  671. EndProc
  672.  
  673. ;----- Select colors and prepare screen
  674.  
  675. Procedure LoginFromScreen
  676.    if ColorScreen
  677.       TextColor White Red
  678.       BoxBorderColor Green Brown
  679.       BoxInsideColor Black Brown
  680.       ClearScreen 176
  681.       ClockColor Black Brown
  682.       TextColor Black Green
  683.       BoxHeaderColor Yellow Mag
  684.       Shadow
  685.    else
  686.       TextColor Grey Black
  687.       ClearScreen 176
  688.       TextColor Black Grey
  689.       BoxBorderColor Black Grey
  690.       BoxInsideColor Black Grey
  691.       BoxHeaderColor Black Grey
  692.       ClockColor Black Grey
  693.    endif
  694.    BlankMessage = 'Netware Login'
  695.    ClockMode = 262
  696.    GotoXY 1 25
  697.    ClearLine
  698.    WriteCenter "Computer Tyme Master Network Login Menu"
  699.    SingleLineBox
  700.    Explode Off
  701.    ShadowColor Grey Red
  702.    if ColorScreen
  703.       DrawBox 3 2 74 5
  704.       ClockPos 42 5
  705.       TextColor Blue Brown
  706.    else
  707.       DrawBox 3 2 76 5
  708.       ClockPos 44 5
  709.    endif
  710.    WriteCenter 'Computer Tyme Software Development Laboratory'
  711.    Writeln
  712.    TextColor Black Brown
  713.    WriteCenter '───────────────────────────────────────────────────────'
  714.    Writeln
  715.    TextColor Black Brown
  716.    Write "  (C) 1990-92 by Marc Perkel"
  717.    DoubleLineBox
  718.    BlankTime = 10
  719.  
  720.    Explode On
  721.    BlockBox
  722.    BoxBorderColor Green Blue
  723.    BoxInsideColor Yellow Blue
  724.    BoxHeader = " Station Information "
  725.    if ColorScreen
  726.       DrawBox 39 17 38 6
  727.       TextColor Yellow Blue
  728.    else
  729.       DrawBox 41 17 38 6
  730.       TextColor Grey Black
  731.    endif
  732.  
  733.    StatusWin = CurrentWindow
  734.    UpdateStatusWindow
  735.  
  736.    ChooseOption
  737.  
  738.    EraseTopWindow
  739.    EraseTopWindow
  740.    EraseTopWindow
  741.    TextColor Grey Black
  742.    ClearScreen
  743. EndProc
  744.  
  745.  
  746. Procedure ChooseOption
  747. var Ch X
  748.    repeat
  749.       X = 4
  750.       if NumberOfElements(Servers) > 1 then X = 5
  751.  
  752.       DrawBox 3 17 26 X
  753.       UseArrows
  754.       OnScreenOnly
  755.       InverseColor Yellow Cyan
  756.       Writeln '  L - Login to Network'
  757.       Write   '  C - Change Password'
  758.       if NumberOfElements(Servers) > 1
  759.          Writeln
  760.          Write   '  S - Select Server'
  761.       endif
  762.  
  763.       Ch = UpperCase(ReadKey)
  764.       if (Ch = 'L') or (Ch = 'C') or (Ch = 'S')
  765.          EraseTopWindow
  766.          if Ch = 'L'
  767.             LoginToNetwork (False)
  768.          endif
  769.          if Ch = 'C'
  770.             LoginToNetwork (True)
  771.          endif
  772.          if Ch = 'S'
  773.             SelectServer
  774.          endif
  775.       endif
  776.    until Logged
  777. EndProc
  778.  
  779.  
  780. Procedure Warning (St)
  781.    BoxHeader ' Warning '
  782.    DrawBox 3 17 length(St) + 4 3
  783.    Write Char(7) ' ' St
  784.    Wait 300
  785.    EraseTopWindow
  786. EndProc
  787.  
  788.  
  789. Procedure LoginToNetwork (CP)
  790. var NewPassVerify
  791.    BoxHeader = ' Logging into Server * ' + MyServer + ' '
  792.    DrawBox 3 10 50 4
  793.    UseArrows Off
  794.    Security
  795.    repeat
  796.       if UserName = ''
  797.          Write ' Name: '
  798.          UserName = UpperCase(Readln)
  799.          Writeln
  800.       endif
  801.       SkipError = True
  802.       Login (UserName,'')      ;try no password
  803.       SkipError = False
  804.       if not Logged
  805.          Write ' Password: '
  806.          OldPass = UpperCase(Readln)
  807.          Write CR
  808.          ClearLine
  809.          Login (UserName,OldPass)
  810.       endif
  811.       if not CP
  812.          CP = PasswordNeedsChanged
  813.          if CP then Warning('Time to change your password!')
  814.       endif
  815.       if CP
  816.          if LastKey <> Esc
  817.             repeat
  818.                Write ' New Password: '
  819.                NewPass = UpperCase(Readln)
  820.                Write CR
  821.                ClearLine
  822.                if NewPass = OldPass then Warning('Select a NEW Password!')
  823.             until NewPass <> OldPass
  824.          endif
  825.          if LastKey <> Esc
  826.             Write ' Verify: '
  827.             NewPassVerify = UpperCase(Readln)
  828.             Write CR
  829.             ClearLine
  830.             if NewPass = NewPassVerify
  831.                NovChangePassword (OldPass,NewPass)
  832.                if NovResult <> 0
  833.                   Warning ('Password Change Failed!')
  834.                   Logged = False
  835.                endif
  836.             else
  837.                Warning('Password Typed Wrong!')
  838.                Logged = False
  839.             endif
  840.          endif
  841.       endif
  842.    ClearScreen
  843.    if not Logged
  844.       UserName = ''
  845.    endif
  846.    until (LastKey = Esc) or Logged
  847.    EraseTopWindow
  848. EndProc
  849.  
  850.  
  851. Procedure Login (User, Pass)
  852.    NovLogin (MyServer + '/' + User, Pass)
  853.    if NovResult = 223 then NovResult = 0  ;grace login
  854.    Logged = NovResult = 0
  855.    if Logged
  856.       NovMapDrive('F',MyServer + '/SYS:LOGIN')
  857.    endif
  858.    if not Logged and not SkipError
  859.  
  860.       if NovResult = 254
  861.          Warning('All Logins Disabled!')
  862.  
  863.       elseif NovResult = 222
  864.          Warning('Password Expired!')
  865.  
  866.       elseif NovResult = 252
  867.          Warning('Invalid User Name!')
  868.  
  869.       elseif NovResult = 220
  870.          Warning('Account Disabled!')
  871.  
  872.       elseif (NovResult = 218) or (NovResult = 219)
  873.          Warning('Invalid Login Time!')
  874.  
  875.       elseif NovResult = 197
  876.          Warning('Intruder Lockout!')
  877.  
  878.       elseif NovResult = 214
  879.          Warning('Requires Encrypted Password!')
  880.  
  881.       elseif NovResult = 255
  882.          Warning('Bad Password!')
  883.  
  884.       else
  885.          Warning('Login Failed! '+ Str(NovResult))
  886.  
  887.       endif
  888.  
  889.    endif
  890. EndProc
  891.  
  892.  
  893. Procedure PasswordNeedsChanged
  894. var X
  895.    X = NovPasswordExpDate (UserName)
  896.    if X = 0 then Return False
  897.    Return (X - Today) / SecondsInDay <= 5
  898. EndProc
  899.  
  900.  
  901. Procedure SelectServer
  902. var St
  903.    DrawBox 25 9 20 Min(NumberOfElements (Servers) + 2,10)
  904.    St = PickOne (Servers)
  905.    if St = '' then Return
  906.    MyServer = St
  907.    NovSetPrimaryServer (MyServer)
  908.    NovSetPreferredServer (MyServer)
  909.    EraseTopWindow
  910.    UpdateStatusWindow
  911. EndProc
  912.  
  913.  
  914. Procedure UpdateStatusWindow
  915.    SetTopWindow StatusWin
  916.    ClearScreen
  917.    Station = Str(NovConnection)
  918.    while length(Station) < 3
  919.       Station = '0' + Station
  920.    endwhile
  921.    Writeln '           Server: ' MyServer
  922.    Writeln '          Network: ' NovStationAddress
  923.    Writeln '       Connection: ' Station
  924.    Write   '      DOS Version: ' DosVersionString
  925.    if StatusWin <> CurrentWindow
  926.       SetWindowUnder (StatusWin,StatusWin + 1)
  927.    endif
  928. EndProc
  929.  
  930. ;----- Returns True if in list
  931.  
  932. Procedure InGroup (Group)
  933.    Return PosInSortedList(UpperCase(Group),MyGroups) > 0
  934. EndProc
  935.  
  936. ;----- Return True if after hours
  937.  
  938. Procedure AfterHours
  939.    Return (DayOfWeek = Sun) or (DayOfWeek = Sat) or (Hour > 17) or (Hour < 7)
  940. EndProc
  941.  
  942. ;----- Show Item for Debugging
  943.  
  944. Procedure ShowMe (Item)
  945.    DrawBox 1 23 80 3
  946.    Write ' '
  947.    TextColor Yellow Cyan
  948.    Write Item
  949.    Wait 300
  950.    EraseTopWindow
  951. EndProc
  952.  
  953.